package udpDemo;

import java.io.IOException;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetAddress;
import java.net.SocketException;

public class ReceiveDemo {

    public static void main(String[] args) throws IOException {

        //接收数据,x必须先发送数据才能接收数据，并且接收的端口要要与发送数据的端口保持一致，recive方法会等待数据发送过来在进行接收

        //1.创建DatagramSocket对象（快递公司）
        //细节：
        //在接收的时候，一定要绑定端口
        //而且绑定的端口一定要跟发送的端口保持一致,要让发送端知道这个端口在哪里，就先运行接收端再运行发送端
        DatagramSocket ds = new DatagramSocket(10086);
        //2.接收数据包
        byte[] bytes = new byte[1024];
        DatagramPacket dp = new DatagramPacket(bytes,bytes.length);//bytes用于接收传送过来的数据包

        //该方法是阻塞的
        //程序执行到这一步的时候，会在这里死等
        //等发送端发送消息
        System.out.println(11111);
        ds.receive(dp);
        System.out.println(2222);
        //3.解析数据包，获得相关的信息
        byte[] data = dp.getData();
        int len = dp.getLength();
        InetAddress address = dp.getAddress();
        int port = dp.getPort();
        System.out.println("接收到数据" + new String(data,0,len));
        System.out.println("该数据是从" + address + "这台电脑中的" + port + "这个端口发出的");
        //4.释放资源
        ds.close();
    }
}
